#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2012/06/16

@author: António Baião
'''
from K_d_tree import k_d_tree, No
from random import randint
import time
import MakeGraphics

'''
Estudo para 10000 valores com 2 dimensões onde cada valor da chave pode ir ate 1000
criação de arvore
'''
listaValoresCriacaoArvore = []
listaTemposCriacaoArvore = []
for k in range(1000,11000,1000):
  
    
    lista = [[randint(0, 1000),randint(0, 1000)] for k in range(k)]
    #lista = [[1], [5], [9], [4],[ 8], [7]]

    #print len(lista[0])

    tree = k_d_tree(k + 3)

    tree.count = len(lista)
    
    tree.count = len(lista)
    
    tree.kdtree(lista)
   

    
    
    #print "NearestNeighbour"
    t1 = time.clock() 
    tree.searchNearestNeighbour(randint(0, k - 1))
    t2 = time.clock()   
   
 

 
    
    tf = t2 - t1
    
    print str(k) + " - " + str(tf)
    
    listaValoresCriacaoArvore.append(k)
    listaTemposCriacaoArvore.append(tf)



MakeGraphics.makeGraphic(listaValoresCriacaoArvore, listaTemposCriacaoArvore)
'''
Estudo para 10000 valores com 4 dimensões onde cada valor da chave pode ir ate 1000
criação de arvore
'''
listaValoresCriacaoArvore = []
listaTemposCriacaoArvore = []
for k in range(1000,11000,1000):
  
    
    lista = [[randint(0, 1000),randint(0, 1000), randint(0, 1000), randint(0, 1000)] for k in range(k)]
    #lista = [[1], [5], [9], [4],[ 8], [7]]

    #print len(lista[0])

    tree = k_d_tree(k + 2)

    tree.count = len(lista)
    
    tree.count = len(lista)
    
    tree.kdtree(lista)
   

    
    
    #print "NearestNeighbour"
    t1 = time.clock() 
    tree.searchNearestNeighbour(randint(0, k - 1))
    t2 = time.clock()   
   
 

 
    
    tf = t2 - t1
    
    print str(k) + " - " + str(tf)
    
    listaValoresCriacaoArvore.append(k)
    listaTemposCriacaoArvore.append(tf)



MakeGraphics.makeGraphic(listaValoresCriacaoArvore, listaTemposCriacaoArvore)
#tree.print_list()

'''


print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x

noTeste = No()
noTeste.key = [9,12]

x = tree.malloc(noTeste)

tree.insert(x)

print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x
#### Inserir    
noTeste = No()
noTeste.key = [4,3]

x = tree.malloc(noTeste)

tree.insert(x)

print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x    


print "SUCESSOR"
print tree.sucessor(9)

print "PESQUISA"
print tree.search(tree.root, [9,12])

print "DELETE"
tree.delete(5)
tree.free(5)


print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x    
    
#### Inserir    
noTeste = No()
noTeste.key = [10,3]

x = tree.malloc(noTeste)

tree.insert(x)

print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x
    
print "NearestNeighbour"
print tree.searchNearestNeighbour(10)    

#### Inserir    
noTeste = No()
noTeste.key = [12,3]

x = tree.malloc(noTeste)

tree.insert(x)

#### Inserir    
noTeste = No()
noTeste.key = [32,3]

x = tree.malloc(noTeste)

tree.insert(x)

print "Rebalancear"
tree.reBalanceTree()

print "INORDER"
lista = []
tree.inorder_walk(tree.root, lista)

for x in lista:
    print x
'''